String.prototype.gblen = function() {    
    var len = 0;    
    for (var i=0; i<this.length; i++) {    
        if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) {    
            len += 2;    
        } else {    
            len ++;    
        }    
    }    
    return len;    
} 

function color2hex (colorStr) {
	var ret = "#";
	var tmp = '';
	var i = 0;
	if (colorStr == "transparent" || colorStr.substring(0, 1) == "#") {
		return colorStr;
	} else if (colorStr.substring(0, 4) == "rgb(") {
		colorStr = colorStr.substring(4, (colorStr.length - 1));
		colorStr = colorStr.split(",");
		for (i=0; i<3; i++) {
			tmp = parseInt(colorStr[i], 10).toString(16).toUpperCase();
			if (tmp.length == 1) {
				tmp = "0" + tmp;
			}
			ret += tmp;
		}
		return ret;
	} else if (colorStr.substring(0,5) == "rgba(") {
		colorStr = colorStr.substring(5, (colorStr.length - 1));
		colorStr = colorStr.split(",");
		if (colorStr[3] == 0) {
			return 'transparent';
		} else {
			for (i=0; i<3; i++) {
				tmp = parseInt(colorStr[i], 10).toString(16).toUpperCase();
				if (tmp.length == 1) {
					tmp = "0" + tmp;
				}
				ret += tmp;
			}
			return ret;
		}
	} else {
		return false;
	}
}


var UM_LAYER = new function () {
	var LAYER_BASKET 	= new Array();
	var CLOSE_FUNCTION 	= new Array();
	var level = 0;
	
	this.open = function (modInfo, param, parent_ob, close_func) {
		// 获取层级数
		level = LAYER_BASKET.length;
		// 记录close function，在close的时候使用
		if (typeof(close_func) == 'function') {
			CLOSE_FUNCTION[level] = close_func;
		} else {
			CLOSE_FUNCTION[level] = '';
		}
		// 构造背景和前景的DOM
		if (typeof(parent_ob) == 'object') {			// 如果给定了打开新层的显示位置
			var offset = $(parent_ob).offset();
			var layer_bg = $('<div id="layer_bg_'+level+'" class="layer_bg_white" onclick="UM_LAYER.close();"></div>');								// 白背景
			var layer_body = $('<div id="layer_body_'+level+'" class="layer_body_absolute" style="left:'+offset.left+'px; top:'+offset.top+'px"></div>');		// 新层定位，加载内容为相对定位
		} else {										// 全屏打开
			var layer_bg = $('<div id="layer_bg_'+level+'" class="layer_bg_black" onclick="UM_LAYER.close();"></div><div class="layer_bg_close" title="关闭" onclick="UM_LAYER.close();"></div>');		// 黑背景
			var layer_body = $('<div id="layer_body_'+level+'" class="layer_body_static"></div>');															// 没有位置定义，加载内容使用绝对定位
		}
		// 加载到文档中
		layer_bg.appendTo('body');
		layer_body.appendTo('body');
		// 在全局变量中记录背景和正文的对象，以用于close layer时删除
		LAYER_BASKET[level] = new Array();
		LAYER_BASKET[level][0] = layer_bg;
		LAYER_BASKET[level][1] = layer_body;
		// 将ajax返回内容加载到layer_body中
		var doc_width 	= $(document).width();		// 记录加载前的文档宽度
		loadMod(modInfo, param, layer_body, function () {
			if (typeof(parent_ob) == 'object') {	// 指定parent时候，检查如果显示到屏幕外面，就把它移动回来
				var layer_body_offset = layer_body.offset();
				// 水平移动。如果大于加载前的文档宽度, 将层向左侧移动
				if ((layer_body_offset.left + layer_body.width()) > (doc_width - 20)) {
					layer_body.offset({ top: layer_body_offset.top, left: (doc_width - layer_body.width() - 40) });		// top位置不变，向左移动层宽度再加40像素
				}
				// 垂直移动。如果大于窗口高度+滚动高度
				if ((layer_body_offset.top + layer_body.height()) > ($(window).height() + $(document).scrollTop())) {
					layer_body.offset({ top: ($(window).height() + $(document).scrollTop() - layer_body.height()), left: layer_body_offset.left });		// left位置不变，向上移动层
				}
			}
		});

	}
	this.close = function (level) {
		if (level > 0 || level === 0 || level === "0") {
			while (LAYER_BASKET.length > level) {
				this.close();
			}
		} else {
			var tmp = LAYER_BASKET.pop();
			tmp[0].remove();
			tmp[1].remove();
			
			this.pop_function();
		}
	}
	this.push_function = function (func) {
		if (typeof(func) == 'function') {
			CLOSE_FUNCTION.push(func);
		}
	}
	this.pop_function = function () {
		var tmp_func = CLOSE_FUNCTION.pop();
		if (typeof(tmp_func) == 'function') {
			tmp_func();
		}
	}
}
/**
 * 按ESC键关闭Layer
 */
$(document).keyup(function(event){
	if (event.keyCode == 27) {
		UM_LAYER.close();
	}
});

/** 弹出层Reader ####################################################################################   **/
function open_reader (id, type, close_function) {
	UM_LAYER.open('reader/default', {'id':id, 'type':type, 'scr_w':screen.width, 'scr_h':screen.height}, '', close_function);
}
/** 浮动层 ####################################################################################   **/
var UM_FLOAT = new function () {
	var mod 	= null;
	var t 		= null;
	var p 		= null;
	var ob 		= null;
	var is_over = false;
	
	var box = $('<div style="position:absolute; background-color:#FFF; top:0; left:0;" onmouseover="UM_FLOAT.open();" onmouseout="UM_FLOAT.close();"></div>');
	
	real_open = function () {
		is_over = true;
		var offset = ob.offset();
		box.offset({ top:offset.top, left:offset.left});
		box.appendTo('body');
		var doc_width 	= $(document).width();		// 记录加载前的文档宽度
		var doc_height 	= $(document).height();		// 记录加载前的文档高度
		loadMod(mod, p, box, function () {
			var box_offset = box.offset();
			if ((box_offset.left + box.width()) > (doc_width - 20)) {		// 如果大于加载前的文档宽度
				// 将层向左侧移动
				box.offset({ top: box_offset.top, left: (doc_width - box.width() - 40) });		// top位置不变，向左移动层宽度再加40像素
			}
			if ((box_offset.top + box.height()) > ($(window).height() + $(document).scrollTop())) {			// 如果大于窗口高度+滚动高度
				box.offset({ top: ($(window).height() + $(document).scrollTop() - box.height()), left: box_offset.left });		// left位置不变，向上移动层
			}
		} );
	}
	real_close = function () {
		is_over = false;
		box.offset({ top:0, left:0});
		box.remove();
	}
	this.open = function (modInfo, param, parent_ob) {
		if (is_over == true) {
			clearTimeout(t);
		} else {
			if (typeof(param) == 'object') 		p = param;
			if (typeof(parent_ob) == 'object') 	ob = $(parent_ob);
			if (modInfo) 						mod = modInfo;
			t = setTimeout("real_open()", 900);
		}
	}
	this.close = function () {
		if (t) clearTimeout(t);
		t = setTimeout("real_close()", 50);
	}
}


/** Ajax加载模块内容 ####################################################################################   **/
/**
 * @param String modInfo	// 调用ajax的模块标识，格式“path/name/cachetime/isGlobalCache”
 * @param Object param		// 传递参数，必须使用object，例：{'a' : 123 , 'b' : 'string'}
 * @param Object target_ob	// DOM对象，将ajax返回内容加载到DOM对象中
 * @param Function fn		// 当ajax执行成功后执行的回调函数，参数为ajax返回的结果
 */
function loadMod (modInfo, param, target_ob, fn) {
	// 处理param， 注：如果传递参数，必须以Object方式传递
	var postStr = 'modInfo='+modInfo+'&scr_w='+screen.width+'&scr_h='+screen.height;
	if (typeof(param) == 'object') {
		for (k in param) {						// 将Object数组转化成为URL param string
			postStr += '&'+k+'='+param[k];		// 是否要使用encodeURIComponent编码一下呢？
		}
	}
	// 在目标元素中显示“加载中”的提示信息
//	if (typeof(target_ob) == 'object') {
//		target_ob = $(target_ob);
//		if ($(target_ob).attr('class') == 'layer_body_static') {		// 全屏显示时，float到屏幕中间
//			var padding_top = Math.floor($(window).height()/3);			// 高度在屏幕1/3位置处
//			target_ob.html('<div style="text-align:center; padding-top:'+padding_top+'px; position:absolute; left:0; right:0; top:0; color:#FFF;">加载中...</div>');
//		} else {
//			var t_h = $(target_ob).height();
//			if (t_h > 100) {		// 有实际高度的元素，loading位置加padding top，保持在1/3高度左右
//				var padding_top = Math.floor(t_h/3);	// padding top， 元素的1/3高度
//				target_ob.html('<div style="display:inline-block; text-align:center; font-size:12px; color:#000; padding-top:'+padding_top+'px;">加载中...</div>');
//			} else {				// 高度比较小，直接插入即可
//				target_ob.html('<div style="display:inline-block; text-align:center; font-size:12px; color:#000; padding:10px; background-color:#FFF;">加载中...</div>');
//			}
//		}
//	}
	
	// AJAX获得数据
	$.ajax({
		type: "POST",
		url: "/ajax.php",
		data: postStr,
		success: function(msg){
			if (typeof(target_ob) == 'object') {
				var doc_width 		= $(document).width();		// 加载浮动层之前的文档宽度， 为了调整浮动层位置使用
				
				target_ob.html(msg);							// 将ajax返回内容加载到DOM对象中
				
				// 移动target_ob的位置
				var target_offset 	= target_ob.offset();
				var target_width 	= target_ob.width();
				
				if ( (target_offset.left + target_width) > doc_width ) {
					var new_left = doc_width - target_width - 5;
					target_ob.offset({top:target_offset.top, left:new_left});
				}
			};
			if (typeof(fn) == 'function') {
				fn(msg);									// 执行回调函数，ajax返回内容作为参数
			}
		},
		error: function () {
			if (typeof(target_ob) == 'object') {
				target_ob.html('网络连接错误！');		// 在DOM对象提示错误
			};
			if (typeof(fn) == 'function') {
				fn(false);									// 执行函数，参数为false
			}
		}
	});
}

function setCookie(c_name, value, expiredays, isHTTPOnly) {
	var exdate = new Date();
	exdate.setDate(exdate.getDate() + expiredays);
	document.cookie = c_name+"="+escape(value)+";expires="+exdate.toGMTString()+";path=/;domain=.uread.me;"+((isHTTPOnly) ? 'HTTPOnly' : '');
}

function getCookie(c_name) {
	if (document.cookie.length>0) {
		c_start = document.cookie.indexOf(c_name + "=");
		if (c_start != -1) {
			c_start = c_start + c_name.length + 1;
			c_end	= document.cookie.indexOf(";", c_start);
			if (c_end == -1) {
				c_end = document.cookie.length;
			}
			return unescape(document.cookie.substring(c_start, c_end));
		}
	}
	return "";
}
// 没有用到
function isEmail (str) {
	var reg = /^[a-zA-Z0-9\._-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
	return reg.test(str);
}